//! se版本
#include <my_key.h>

void my_key_init(void)
{
  pinMode(ENCODER_CLK, INPUT_PULLUP); // 与上键共享 MY_KEY_UP
  pinMode(ENCODER_DT, INPUT_PULLUP);  // 与下键共享 MY_KEY_DOWN
  pinMode(ENCODER_SW, INPUT_PULLUP);  // 与中键共享 MY_KEY_MID
}

uint8_t my_key_pressed(void)
{
  return digitalRead(ENCODER_SW); //直接返回
}

int16_t my_key_get(void)
{
  static bool _is_AB_all_HIGH = true;          // 只读取双双高电平后的第一个波形
  uint8_t _ch_a = digitalRead(ENCODER_CLK); // 先存再判断,避免刚好两次读的不一样
  uint8_t _ch_b = digitalRead(ENCODER_DT);   // 因为这些值要多次使用


  if (_is_AB_all_HIGH) // 只读取双双高电平后的第一个波形
  {
    if (_ch_a == 0 && _ch_b == 1)
    {
      _is_AB_all_HIGH = false; // 一格旋转只读取一次就够了
      return 1;              // 直接返回,编码器顺时针
    }
    if (_ch_a == 1 && _ch_b == 0)
    {
      _is_AB_all_HIGH = false;
      return -1; // 直接返回,编码器逆时针
    }
  }
  else
  {
    if (_ch_a == 1 && _ch_b == 1)
    {
      _is_AB_all_HIGH = true; // 都是高电平后,无旋转,进入可读状态
    }
  }
  return 0;
}